package com.ecommerce.dto;

import com.ecommerce.product.domain.Product;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 商品查询响应数据传输对象
 * <p>
 * 用于封装商品分页查询的返回结果，支持基于PIT(Point-In-Time)的安全分页机制
 * 包含当前页商品列表、总命中数及分页标记信息
 *
 * @see com.ecommerce.product.domain.Product
 * @see java.io.Serializable
 */
@Data
public class ProductQueryResponseDTO implements Serializable {
    /**
     * 当前页的商品数据列表
     * <p>
     * 根据查询条件和分页参数返回的商品集合
     */
    private List<Product> products;   // 商品列表

    /**
     * 符合查询条件的商品总数
     * <p>
     * 不考虑分页限制的总命中记录数
     */
    private long totalHits;           // 总命中数

    /**
     * PIT(Point-In-Time) ID
     * <p>
     * Elasticsearch的快照ID，用于保持分页一致性
     * 客户端在下次分页请求时应携带此ID
     */
    private String pitId;            // PIT ID（用于下一页）

    /**
     * 分页标记数组
     * <p>
     * 当前页最后一条记录的排序值，用于search_after分页
     * 客户端在下次分页请求时应携带此标记
     */
    private Object[] searchAfter;     // 分页标记（用于下一页）
}